#!/usr/bin/env python
# coding: utf-8

# # 高德API的调用和使用

# ## 功能一：地理/逆地理编码

# In[12]:


import requests

key = "7347a7fce48d28ebeafa2256c9dfc189"

def geo(address):
    '''获取地理编码'''
    '''输入所要查询的地理地址，即可获得该地理位置的经纬度'''
    url = 'https://restapi.amap.com/v3/geocode/geo?parameters'
    params = {
        'key':key,
        'address':address,
        'output':'json',
    }
    response = requests.get(url,params=params)
    data = response.json()
    return data


# In[13]:


geo('从化区')


# ### 思考与分析
# 卫星通过高清拍照传输建筑物的图片到计算机，计算机通过计算机视觉系统分析图中的建筑物是什么，并记录下该建筑物的经纬度坐标。再将这些位置信息封装成可以调用的api。

# ## 功能二：路径规划

# In[18]:


import requests

key= "7347a7fce48d28ebeafa2256c9dfc189"
    
def walking(origin,destination):
    '''规划步行规划'''
    '''输入出发地和目的地的坐标，即可获得预定规划路线'''
    url='https://restapi.amap.com/v3/direction/walking?parameters'
    params={
        'key': key,
        'origin':origin,
        'destination':destination,
        'output':'json',
    }
    response = requests.get(url,params=params)
    data = response.json()
    return data


# In[19]:


walking('113.679287,23.632575','113.668051,23.600869')


# ### 思考与分析
# 卫星通过高清拍照传输建筑物的图片到计算机，计算机通过计算机视觉系统分析图中的道路拥堵状况，并规划最佳路线。再将这些规划路线的信息封装成可以调用的api。
# 

# ## 功能三：行政区查询

# In[14]:


import requests

key= "7347a7fce48d28ebeafa2256c9dfc189"
    
def district(keywords):
    '''行政区查询'''
    '''输入想要找行政地区的名称，即可反馈该地区的坐标等信息'''
    url='https://restapi.amap.com/v3/config/district?parameters'
    params={
        'key': key,
        'keywords':keywords,
        'output':'json',
    }
    response = requests.get(url,params=params)
    data = response.json()
    return data


# In[15]:


district('惠州市')


# ### 思考与分析
# 卫星通过高清拍照传输行政区的图片到计算机，计算机通过计算机视觉系统分析图中的行政区是哪个地级市，并记录下该行政区的经纬度坐标。再将这些位置信息封装成可以调用的api。

# ## 功能四：搜索POI

# In[3]:


import requests

key = "7347a7fce48d28ebeafa2256c9dfc189"

def place(keyword,city):
    '''搜索POI'''
    '''输入所要搜索的关键字如：美食，和所要查询的城市名称，即可返回该关键字的地址以及图片等信息'''
    url="https://restapi.amap.com/v3/place/text?parameters"
    params={
        'key': key,
        'keyword':keyword,
        'city':city,
        'output':'json',
    }
    response = requests.get(url,params=params)
    data = response.json()
    return data


# In[5]:


place('汽车站','广州')


# ### 思考与分析
# 计算机通过关键字推荐，将相关的地址信息如照片、坐标、电话等信息封装成可以调用的api

# ## 功能五：IP定位

# In[5]:


import requests

key = "7347a7fce48d28ebeafa2256c9dfc189"

def restapi(ip):
    '''restapi'''
    '''IP定位是一个简单的HTTP接口，根据用户输入的IP地址，能够快速的帮用户定位IP的所在位置'''
    url="https://restapi.amap.com/v3/ip?parameters"
    params={
        'key': key,
        'ip':ip,
        'output':'json',
    }
    response = requests.get(url,params=params)
    data = response.json()
    return data


# In[6]:


restapi('114.247.50.2')


# ### 思考与分析
# 计算机通过用户输入的IP地址传输入卫星，利用卫星定位IP地址的位置

# ## 功能六:坐标转换

# In[4]:


import requests

key = "7347a7fce48d28ebeafa2256c9dfc189"

def assistant(locations,coordsys):  
    
    '''坐标转换是一类简单的HTTP接口，能够将用户输入的非高德坐标（GPS坐标、mapbar坐标、baidu坐标）转换成高德坐标。'''
    
    url="https://restapi.amap.com/v3/assistant/coordinate/convert?parameters"
    params={
        'key': key,
        'locations':locations,
        'output':'json',
        'coordsys':coordsys,
    }
    response = requests.get(url,params=params)
    data = response.json()
    return data


# In[5]:


assistant('116.481499,39.990475|116.481499,39.990375','gps')


# ## 思考与分析
# 将gsp等坐标的分隔符转化为高德地图的分割符

# ## 功能七：天气查询

# In[7]:


import requests

key = "7347a7fce48d28ebeafa2256c9dfc189"

def weather(city):  
    
###天气查询是一个简单的HTTP接口，根据用户输入的adcode，查询目标区域当前/未来的天气情况。
    
    url='https://restapi.amap.com/v3/weather/weatherInfo?parameters'
    params={
        'key': key,
        'city':city,
    }
    response = requests.get(url,params=params)
    data = response.json()
    return data


# In[8]:


weather('110101')


# ### 思考与分析
# 用户输入城市编码，计算机定位所在的城市，返回查询到的天气信息

# ## 功能八：输入提示

# In[17]:


import requests

key = "7347a7fce48d28ebeafa2256c9dfc189"

'''输入提示是一类简单的HTTP接口，提供根据用户输入的关键词查询返回建议列表。'''

def inputtips(keywords):  
    
    url='https://restapi.amap.com/v3/assistant/inputtips?parameters'
    params={
        'key': key,
        'keywords':keywords,
    }
    response = requests.get(url,params=params)
    data = response.json()
    return data


# In[18]:


inputtips('肯德基')


# ### 思考与分析
# 用户输入关键字，计算机通过推荐系统将相关的关键字推荐反馈给用户

# ## 功能九：交通态势

# In[20]:


import requests

key = "7347a7fce48d28ebeafa2256c9dfc189"

'''交通态势是一类简单的HTTP接口，提供根据用户输入的内容能够返回希望查询的交通态势情况。'''

def traffic(rectangle):  
    
    url='https://restapi.amap.com/v3/traffic/status/rectangle?parameters'
    params={
        'key': key,
        'rectangle':rectangle,
    }
    response = requests.get(url,params=params)
    data = response.json()
    return data


# In[21]:


traffic('116.351147,39.966309;116.357134,39.968727')


# ### 思考与分析
# 卫星拍摄范围内的图片，根据识别图中路段的车辆数目来判断路段的拥堵情况，再将反馈结果返回给用户

# ## 功能十：静态地图

# In[5]:


import requests
from PIL import Image
from io import BytesIO
key = "7347a7fce48d28ebeafa2256c9dfc189"

'''静态地图服务通过返回一张地图图片响应HTTP请求，使用户能够将高德地图以图片形式嵌入自己的网页中。用户可以指定请求的地图位置、图片大小、以及在地图上添加覆盖物，如标签、标注、折线、多边形。'''

def staticmap(location)->str:
    params = {
        "key":key,
        "location":location,
        "zoom":"15",
        "size":"1024*1024",
        "scale":"2",
        "traffic":"1",
    }
    url = "https://restapi.amap.com/v3/staticmap?parameters"
    response = requests.get(url,params=params)
    data = Image.open(BytesIO(response.content))
    return data


# In[6]:


staticmap( '113.586605,23.548852')


# ## 思考与分析
# 用户输入经纬度坐标到计算机，卫星通过拍照获取照片，再返回可视化的静态地图

# ## 功能十一：地理围栏

# In[1]:




def create_wl():
    url = "https://restapi.amap.com/v4/geofence/meta?key=7347a7fce48d28ebeafa2256c9dfc189"
    params = {
        "name":"测试围栏",
        "repeat":"Mon,Tues,Wed,Thur,Fri,Sat,Sun",
        "center":"114.304166,30.398784",
        "radius":"3000",
        "valid_time":"2019-12-12"
    }
    answer = requests.post(url,json=params).json()
    return answer


# In[16]:


create_wl()


# In[17]:


{'data': {'gid': '5d664b90-126b-4e07-9802-a7e4c90d58f6',
  'id': '0',
  'message': '成功',
  'status': '0'},
 'errcode': 0,
 'errdetail': None,
 'errmsg': 'OK',
 'ext': None}


# ## 思考与分析
# 新建一个区域范围，根据用户的位置判断用户是否在这个范围里

# ## 功能十二：批量请求接口

# In[11]:


import requests

key = "7347a7fce48d28ebeafa2256c9dfc189"

url="https://restapi.amap.com/v3/batch?key=7347a7fce48d28ebeafa2256c9dfc189"

'''批量接口通过用户传入合并后的请求，同时返回多个请求的顺序集合，目前最多支持20个子请求。 返回的顺序与子请求的顺序一致。'''

def more():
    header={
                'Connection':'close',
                'Accept':'application/json,image/gif, image/jpeg, image/pjpeg, image/pjpeg, application/x-shockwave-flash, */*',
                'User-Agent':'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 2.0.50727)',
                "Content-Type": "application/json; charset=UTF-8"
    }
    body={
            "ops": [
            {
                "url": "/v3/place/around?offset=10&page=1&key=7347a7fce48d28ebeafa2256c9dfc189&location=116.50394379585519,39.278209477408794&output=json&radius=100000&types=080000"
            },
            {
                "url": "/v3/place/around?offset=10&page=1&key=7347a7fce48d28ebeafa2256c9dfc189&location=118.50394379585519,39.278209477408794&output=json&radius=100000&types=080000"
            }
        ]
    }

    r=requests.post(url,json=body).json()

    return r


# In[12]:


more()


# ## 功能十三：轨迹纠偏

# In[5]:


url="https://restapi.amap.com/v4/grasproad/driving?key=7347a7fce48d28ebeafa2256c9dfc189"
def driving():

    body=[{
    "x": 116.449429,
    "y": 40.014844,
    "sp": 4,
    "ag": 110,
    "tm": 1478831753
    }, {
    "x": 116.449639,
    "y": 40.014776,
    "sp": 3,
    "ag": 110,
    "tm": 23
    }, {
    "x": 116.449859,
    "y": 40.014716,
    "sp": 3,
    "ag": 111,
    "tm": 33
    }, {
    "x": 116.450074,
    "y": 40.014658,
    "sp": 3,
    "ag": 110,
    "tm": 31
    }, {
    "x": 116.450273,
    "y": 40.014598,
    "sp": 3,
    "ag": 111,
    "tm": 20
    }]



    r=requests.post(url=url,json=body).json()
    
    return r


# In[6]:


driving()


# ### 思考与分析
# 根据偏移的路线，计算出正确的坐标点

# # 一键生成旅游攻略APP

# * 输入所要去的城市、预算、人数、旅游的天数等参数
# * 一键生成旅游指南，返回旅游的交通线路、所有旅游行程、特色周边
# * 根据天气查询api 交通态势api合理安排路线，搜索POI查询周边信息
# * 用户只需按照APP上的指示就可以体验到完美的旅游体验
# ### 用到的api功能
# * 天气查询api
# * 交通态势api
# * 搜索POI

# In[ ]:




